#!/bin/sh

# $Id$

# Purpose: Generate PVM architecture string

# Usage:
# cp ~/sh/pvmgetarch ~/nco/bld/pvmgetarch
# cp ~/sh/pvmgetarch ~/aer/pvmgetarch
# scp ~/sh/pvmgetarch dust.ess.uci.edu:/var/www/html/dead/pvmgetarch

# This is a heuristic thing that may need to be tuned from time
# to time.  I don't know of a real solution to determining the
# machine type.

# Notes:
#   1. Local people mess with things.
#   2. It's good to try a few things for robustness.
#   3. Don't use test -x

# 08 Apr 1993  Robert Manchek  manchek@CS.UTK.EDU.
# 24 Aug 1994  last revision
# 28 Jul 1995  release 3.3.8
# 20231103: Replace WIN32 with WINOS (since Windows has 64bit now too)

# begin section that may need to be tuned
ARCH=UNKNOWN

#
# determine the machine type from scratch
#
if [ -f /bin/uname -o -f /usr/bin/uname \
		-o -f /bin/uname.exe -o -f /usr/bin/uname.exe ]; then
	if [ -f /bin/uname ]; then
		os="`/bin/uname -s`"
		ht="`/bin/uname -m`"
		ov="`/bin/uname -v`"
	elif [ -f /usr/bin/uname ]; then
		os="`/usr/bin/uname -s`"
		ht="`/usr/bin/uname -m`"
		ov="`/usr/bin/uname -v`"
	elif [ -f /bin/uname.exe ]; then
		os="`/bin/uname.exe -s`"
		ht="`/bin/uname.exe -m`"
		ov="`/bin/uname.exe -v`"
	else
		os="`/usr/bin/uname.exe -s`"
		ht="`/usr/bin/uname.exe -m`"
		ov="`/usr/bin/uname.exe -v`"
	fi

	case "$os,$ht" in
	SunOS,sun3* )           ARCH=SUN3 ;;
	SunOS,sun4* )           ARCH=SUN4 ;;
	SunOS,i86pc )           ARCH=X86SOL2 ;;
	ULTRIX,RISC )           ARCH=PMAX ;;
	ULTRIX,VAX )            ARCH=UVAX ;;
	AIX*,* )                ARCH=RS6K ;;
	*HP*,9000/[2345]* )     ARCH=HP300 ;;
	*HP*,9000/[78]* )       ARCH=HPPA ;;
	IRIX,* )                ARCH=SGI ;;
	IRIX64,* )              ARCH=SGI64 ;;
	*OSF*,alpha )           ARCH=ALPHA ;;
# 20031116 csz++ Implement AMD
	Linux,x86_64 )           ARCH=LINUXAMD64 ;;
# csz--
	Linux,alpha )           ARCH=LINUXALPHA ;;
	CRSOS,smp )             ARCH=CRAYSMP ;;
	*,paragon )             ARCH=PGON ;;
	dgux,AViiON )           ARCH=DGAV ;;
	*,88k )                 ARCH=E88K ;;
	*,mips )                ARCH=MIPS ;;
	*,CRAY-2 )              ARCH=CRAY2 ;;
	Linux,i[3456]86 )       ARCH=LINUX ;;
	Linux,sparc)		ARCH=LINUXSPARC ;;
	BSD/OS,i[3456]86 )      ARCH=BSD386 ;;
	FreeBSD,i386 )          ARCH=FREEBSD ;;
# 20020812 csz++ Implement MACOS
	Darwin,Power* )         ARCH=MACOS ;;
# csz--
# 20100705 csz++ Implement OS X on PC chips
	Darwin,x86_64 )         ARCH=MACOS ;;
# csz--
# 20020812 csz++ deprecate SX3 in favor of NECSX
#	SUPER-UX,SX-3 )         ARCH=SX3 ;;
	SUPER-UX,SX-* )         ARCH=NECSX ;;
# csz--
	uts,* )                 ARCH=UTS2 ;;
	realix,M88* )           ARCH=M88K ;;
	DomainOS,DN* )          ARCH=APOLLO ;;
	OS/2,i[3456]86 )        ARCH=OS2 ;;
	esac
fi

if [ "$ARCH" = UNKNOWN ]; then
	if [ -f /bin/arch ]; then
		case "`/bin/arch`" in
		ksr1 ) ARCH=KSR1 ;;
		sun2 ) ARCH=SUN2 ;;
		sun3 ) ARCH=SUN3 ;;
		sun4 ) ARCH=SUN4 ;;
		esac
	fi
fi

if [ "$ARCH" = UNKNOWN ]; then

	if [ -f /usr/etc/RELDEF ]; then ARCH=ATT; fi

	if [ -f /ultrixboot ]; then
		if [ -f /pcs750.bin ]; then
			ARCH=UVAX
		else
			ARCH=PMAX
		fi
	else
		if [ -f /pcs750.bin ]; then ARCH=VAX; fi
	fi

	if [ -d /usr/alliant ]; then ARCH=AFX8; fi
	if [ -f /usr/bin/cluster ]; then ARCH=BFLY; fi
	if [ -d /usr/convex ]; then ARCH=CNVX; fi
#++csz
#	if [ -f /unicos ]; then ARCH=CRAY; fi
#--csz
	if [ -f /hp-ux ]; then ARCH=HP300; fi
	if [ -f /usr/bin/getcube ]; then ARCH=I860; fi
	if [ -f /usr/bin/asm56000 ]; then ARCH=NEXT; fi
	if [ -f /etc/vg ]; then ARCH=RS6K; fi
	if [ -d /usr/include/caif ]; then ARCH=RT; fi
#++csz
# Move check for /unicos to after /bin/4d because Ouray=Unicos 10.0.0 has both
	if [ -f /bin/4d ]; then ARCH=SGI; fi
	if [ -f /unicos ]; then ARCH=CRAY; fi
#--csz
	if [ -f /dynix ]; then ARCH=SYMM; fi
	if [ -f /bin/titan ]; then ARCH=TITN; fi

	if [ -f /netbsd ]; then
		case "`/usr/bin/machine`" in
		i386)   ARCH=NETBSDI386 ;;
		amiga)  ARCH=NETBSDAMIGA ;;
		hp300)  ARCH=NETBSDHP300 ;;
		mac68k) ARCH=NETBSDMAC68K ;;
		pmax)   ARCH=NETBSDPMAX ;;
		sparc)  ARCH=NETBSDSPARC ;;
		sun3)   ARCH=NETBSDSUN3 ;;
		esac
	elif [ -f /usr/bin/machine ]; then
		case "`/usr/bin/machine`" in
		i386 ) ARCH=BSD386 ;;
		esac
	fi
	if [ -f /usr/bin/uxpm ] && /usr/bin/uxpm ; then
		ARCH=UXPM
	fi
	if [ -f /usr/bin/uxpv ] && /usr/bin/uxpv ; then
		ARCH=UXPV
	fi
fi

if [ "$ARCH" = UNKNOWN ]; then
	if [ -f /bin/uname -o -f /usr/bin/uname ]; then
		if [ -f /bin/uname ]; then
			os="`/bin/uname -s`"
			ht="`/bin/uname -m`"
			rv="`/bin/uname -r`"
		else
			os="`/usr/bin/uname -s`"
			ht="`/usr/bin/uname -m`"
			rv="`/usr/bin/uname -r`"
		fi

		case "$os,$ht" in
#csz++
#		    CYGWIN*,x86_64) ARCH=WINOS ;;
		    CYGWIN*,* | cygwin*,*) ARCH=WINOS ;;
# 20231103: Update to allow MINGW
		    MINGW*,* | ming*,*) ARCH=WINOS ;;
#csz--
		    
                esac

		case "$os,$ht" in
		*,i[3456]86 )    case "$rv" in
				4.*) ARCH=UWARE ;;
#csz++
# 20020708: Change SCO to WIN32
#				*) ARCH=SCO ;;
				*) ARCH=WINOS ;;
#csz--
				esac
		esac
	fi
fi

#
# update the machine type to derive subclasses
#
if [ "$ARCH" = SUN4 ]; then
	rel="`/bin/uname -r`"
	case "$rel" in
	5.* )   ARCH=SUN4SOL2 ;;
	esac
fi
if [ "$ARCH" = SUN4SOL2 ]; then
#++csz
	nproc="`/bin/mpstat | /bin/wc -l`"
#	nproc="`/bin/mpstat | wc -l`"
# Omit requirement that PVM_SHMEM be set to return SUNMP
# Keep requirement that /bin/mpstat return multiple lines
#	if [ $nproc -gt 2 -a "$PVM_SHMEM" = ON ];
	if [ $nproc -gt 2 ];
#--csz
		then ARCH=SUNMP;
	fi
fi
if [ "$ARCH" = ALPHA ]; then
	rel="`/usr/bin/uname -r`"
	case "$rel" in
	*[34].*)
		nproc="`/usr/sbin/sizer -p`"
		if [ $nproc -gt 1 -a "$PVM_SHMEM" = ON ];
			then ARCH=ALPHAMP;
		fi ;;
	esac
fi
if [ "$ARCH" = SGI ]; then
	rel="`/bin/uname -r`"
	case "$rel" in
	5.* )   ARCH=SGI5 ;;
	6.* )   ARCH=SGI6 ;;
	esac
fi
if [ "$ARCH" = SGI64 ]; then
#++csz
	nproc="`/usr/sbin/mpadmin -n | /bin/wc -w`"
# Omit requirement that PVM_SHMEM be set to return SGIMP64
# Do require that /bin/mpadmin return more procs than winterpark
#	if [ $nproc -gt 1 -a "$PVM_SHMEM" = ON ];
#	if [ $nproc -gt 9 ];
# 20020606: Only require 4 processors so utefe qualifies
	if [ $nproc -gt 4 ];
		then ARCH=SGIMP64;
	fi
fi
if [ "$ARCH" = SGI5 ]; then
	nproc="`/usr/sbin/mpadmin -n | /bin/wc -w`"
	if [ $nproc -gt 1 -a "$PVM_SHMEM" = ON ];
		then ARCH=SGIMP;
	fi
fi
if [ "$ARCH" = SGI6 ]; then
	nproc="`/usr/sbin/mpadmin -n | wc -w`"
	if [ $nproc -gt 1 -a "$PVM_SHMEM" = ON ];
		then ARCH=SGIMP6;
	fi
fi
if [ "$ARCH" = SUN4 -a -f /dev/cm ]; then ARCH=CM2; fi
if [ "$ARCH" = SUN4 -a -f /dev/cmni ]; then ARCH=CM5; fi
if [ "$ARCH" = CNVX ]; then
	if /usr/convex/getsysinfo -f native_default; then
		ARCH=CNVXN
	fi
fi
if [ "$ARCH" = PMAX -a -d /usr/maspar ]; then ARCH=MASPAR; fi
if [ "$ARCH" = RS6K ]; then
# csz++
#	case "$os,$ov" in
	case "$os" in
#	AIX*,4 )	nproc="`/usr/sbin/lsdev -C -c processor | wc -l`"
	    AIX )	nproc="`/usr/sbin/lsdev -C -c processor | wc -l`"
			if [ $nproc -gt 1 -a "$PVM_SHMEM" = ON ]; then 
				ARCH=AIX4MP;
			else
# Make ACD machines (e.g., gss1.acd.ucar.edu) return plain old AIX
#				ARCH=AIX46K;
				ARCH=AIX;
# csz--
			fi ;;
	esac
fi
if [ "$ARCH" = HPPA -a -f /bin/sysinfo ]; then ARCH=CSPP; fi
if [ "$ARCH" = HPPA ]; then
	nproc="`/usr/bin/vmstat -n | wc -l`"
	if [ $nproc -gt 8 -a "$PVM_SHMEM" = ON ];
		then ARCH=HPPAMP;
	fi
fi
#
# ugh, done.
#

echo $ARCH
exit

